home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Windows 95 API Bible
/
Windows 95 API Bible 3 Disc Set.iso
/
Win32 API Bible Book 3 of 3.iso
/
chapte13
/
cmc.c
next >
Wrap
C/C++ Source or Header
|
1996-03-06
|
10KB
|
248 lines
#include <windows.h>
#include "cmc.h"
static HMODULE hCMCLib = NULL;
static BOOL bCMCInst = FALSE;
typedef CMC_return_code (PASCAL* LPFNCMCACTON)
( CMC_session_id session, CMC_message_reference* message_reference, CMC_enum operation,
CMC_flags act_on_flags, CMC_ui_id ui_id, CMC_extension* act_on_extensions );
typedef CMC_return_code (PASCAL* LPFNCMCFREE)( CMC_buffer memory );
typedef CMC_return_code (PASCAL* LPFNCMCLIST)
( CMC_session_id session, CMC_string message_type, CMC_flags list_flags,
CMC_message_reference* seed, CMC_uint32* count, CMC_ui_id ui_id,
CMC_message_summary** result, CMC_extension* list_extensions );
typedef CMC_return_code (PASCAL* LPFNCMCLOGOFF)
( CMC_session_id session, CMC_ui_id ui_id, CMC_flags logoff_flags, CMC_extension* logoff_extensions );
typedef CMC_return_code (PASCAL* LPFNCMCLOGON)
( CMC_string service, CMC_string user, CMC_string password, CMC_object_identifier character_set,
CMC_ui_id ui_id, CMC_uint16 caller_CMC_version, CMC_flags logon_flags,
CMC_session_id* session, CMC_extension* logon_extensions );
typedef CMC_return_code (PASCAL* LPFNCMCLOOKUP)
( CMC_session_id session, CMC_recipient* recipient_in, CMC_flags look_up_flags,
CMC_ui_id ui_id, CMC_uint32* count, CMC_recipient** recipient_out,
CMC_extension* look_up_extensions );
typedef CMC_return_code (PASCAL* LPFNCMCQUERYCONFIGURATION)
( CMC_session_id session, CMC_enum item, CMC_buffer reference, CMC_extension* config_extensions );
typedef CMC_return_code (PASCAL* LPFNCMCREAD)
( CMC_session_id session, CMC_message_reference* message_reference, CMC_flags read_flags,
CMC_message** message, CMC_ui_id ui_id, CMC_extension* read_extensions );
typedef CMC_return_code (PASCAL* LPFNCMCSEND)
( CMC_session_id session, CMC_message* message, CMC_flags send_flags, CMC_ui_id ui_id,
CMC_extension* send_extensions );
typedef CMC_return_code (PASCAL* LPFNCMCSENDDOCUMENTS)
( CMC_string recipient_addresses, CMC_string subject, CMC_string text_note,
CMC_flags send_doc_flags, CMC_string file_paths, CMC_string file_names,
CMC_string delimiter, CMC_ui_id ui_id );
LPFNCMCACTON pfnCMCActOn = NULL;
LPFNCMCFREE pfnCMCFree = NULL;
LPFNCMCLIST pfnCMCList = NULL;
LPFNCMCLOGOFF pfnCMCLogOff = NULL;
LPFNCMCLOGON pfnCMCLogon = NULL;
LPFNCMCLOOKUP pfnCMCLookup = NULL;
LPFNCMCQUERYCONFIGURATION pfnCMCQueryConfiguration = NULL;
LPFNCMCREAD pfnCMCRead = NULL;
LPFNCMCSEND pfnCMCSend = NULL;
LPFNCMCSENDDOCUMENTS pfnCMCSendDocuments = NULL;
BOOL CMCInitialize()
{
HKEY hKey;
BYTE szValue[64];
if ( RegOpenKeyEx( HKEY_LOCAL_MACHINE, "SOFTWARE\\Microsoft\\Windows Messaging Subsystem",
0, KEY_READ, &hKey ) == ERROR_SUCCESS )
{
DWORD dwType;
DWORD dwLen = sizeof( szValue )-1;
if ( RegQueryValueEx( hKey, "CMC", NULL, &dwType, szValue, &dwLen ) == ERROR_SUCCESS )
{
dwLen = sizeof( szValue )-1;
if ( szValue[0] == '1' &&
RegQueryValueEx( hKey, "CMCDLLNAME32", NULL, &dwType, szValue, &dwLen ) == ERROR_SUCCESS )
{
bCMCInst = TRUE;
}
}
RegCloseKey( hKey );
}
if ( !bCMCInst )
return( FALSE );
if ( (hCMCLib = LoadLibrary( (LPTSTR)szValue )) &&
(pfnCMCActOn = (LPFNCMCACTON)GetProcAddress( hCMCLib, "cmc_act_on" )) &&
(pfnCMCFree = (LPFNCMCFREE)GetProcAddress( hCMCLib, "cmc_free" )) &&
(pfnCMCList = (LPFNCMCLIST)GetProcAddress( hCMCLib, "cmc_list" )) &&
(pfnCMCLogOff = (LPFNCMCLOGOFF)GetProcAddress( hCMCLib, "cmc_logoff" )) &&
(pfnCMCLogon = (LPFNCMCLOGON)GetProcAddress( hCMCLib, "cmc_logon" )) &&
(pfnCMCLookup = (LPFNCMCLOOKUP)GetProcAddress( hCMCLib, "cmc_look_up" )) &&
(pfnCMCQueryConfiguration = (LPFNCMCQUERYCONFIGURATION)GetProcAddress( hCMCLib, "cmc_query_configuration" )) &&
(pfnCMCRead = (LPFNCMCREAD)GetProcAddress( hCMCLib, "cmc_read" )) &&
(pfnCMCSend = (LPFNCMCSEND)GetProcAddress( hCMCLib, "cmc_send" )) &&
(pfnCMCSendDocuments = (LPFNCMCSENDDOCUMENTS)GetProcAddress( hCMCLib, "cmc_send_documents" )) )
{
return( TRUE );
}
CMCUninitialize();
return( FALSE );
}
VOID CMCUninitialize()
{
if ( hCMCLib )
FreeLibrary( hCMCLib );
bCMCInst = FALSE;
}
CMC_return_code CMCActOn( CMC_session_id session,
CMC_message_reference* message_reference,
CMC_enum operation,
CMC_flags act_on_flags,
CMC_ui_id ui_id,
CMC_extension* act_on_extensions )
{
if ( !bCMCInst )
return( CMC_E_FAILURE );
return( (*pfnCMCActOn)( session, message_reference, operation, act_on_flags, ui_id, act_on_extensions ) );
}
CMC_return_code CMCFree( CMC_buffer memory )
{
if ( !bCMCInst )
return( CMC_E_FAILURE );
return( (*pfnCMCFree)( memory ) );
}
CMC_return_code CMCList( CMC_session_id session,
CMC_string message_type,
CMC_flags list_flags,
CMC_message_reference* seed,
CMC_uint32* count,
CMC_ui_id ui_id,
CMC_message_summary** result,
CMC_extension* list_extensions )
{
if ( !bCMCInst )
return( CMC_E_FAILURE );
return( (*pfnCMCList)( session, message_type, list_flags, seed, count, ui_id, result, list_extensions ) );
}
CMC_return_code CMCLogoff( CMC_session_id session,
CMC_ui_id ui_id,
CMC_flags logoff_flags,
CMC_extension* logoff_extensions )
{
if ( !bCMCInst )
return( CMC_E_FAILURE );
return( (*pfnCMCLogOff)( session, ui_id, logoff_flags, logoff_extensions ) );
}
CMC_return_code CMCLogon( CMC_string service,
CMC_string user,
CMC_string password,
CMC_object_identifier character_set,
CMC_ui_id ui_id,
CMC_uint16 caller_CMC_version,
CMC_flags logon_flags,
CMC_session_id* session,
CMC_extension* logon_extensions )
{
if ( !bCMCInst )
return( CMC_E_FAILURE );
return( (*pfnCMCLogon)( service, user, password, character_set, ui_id,
caller_CMC_version, logon_flags, session, logon_extensions ) );
}
CMC_return_code CMCLookup( CMC_session_id session,
CMC_recipient* recipient_in,
CMC_flags look_up_flags,
CMC_ui_id ui_id,
CMC_uint32* count,
CMC_recipient** recipient_out,
CMC_extension* look_up_extensions )
{
if ( !bCMCInst )
return( CMC_E_FAILURE );
return( (*pfnCMCLookup)( session, recipient_in, look_up_flags, ui_id, count,
recipient_out, look_up_extensions ) );
}
CMC_return_code CMCQueryConfiguration( CMC_session_id session,
CMC_enum item,
CMC_buffer reference,
CMC_extension* config_extensions )
{
if ( !bCMCInst )
return( CMC_E_FAILURE );
return( (*pfnCMCQueryConfiguration)( session, item, reference, config_extensions ) );
}
CMC_return_code CMCRead( CMC_session_id session,
CMC_message_reference* message_reference,
CMC_flags read_flags,
CMC_message** message,
CMC_ui_id ui_id,
CMC_extension* read_extensions )
{
if ( !bCMCInst )
return( CMC_E_FAILURE );
return( (*pfnCMCRead)( session, message_reference, read_flags, message, ui_id, read_extensions ) );
}
CMC_return_code CMCSend( CMC_session_id session,
CMC_message* message,
CMC_flags send_flags,
CMC_ui_id ui_id,
CMC_extension* send_extensions )
{
if ( !bCMCInst )
return( CMC_E_FAILURE );
return( (*pfnCMCSend)( session, message, send_flags, ui_id, send_extensions ) );
}
CMC_return_code CMCSendDocuments( CMC_string recipient_addresses,
CMC_string subject,
CMC_string text_note,
CMC_flags send_doc_flags,
CMC_string file_paths,
CMC_string file_names,
CMC_string delimiter,
CMC_ui_id ui_id )
{
if ( !bCMCInst )
return( CMC_E_FAILURE );
return( (*pfnCMCSendDocuments)( recipient_addresses, subject, text_note, send_doc_flags, file_paths,
file_names, delimiter, ui_id ) );
}